package src.CodeTop;

/**
 * 给你一个整数数组 nums ，请你找出数组中乘积最大的连续子数组（该子数组中至少包含一个数字），并返回该子数组所对应的乘积。
 *
 *  
 *
 * 示例 1:
 *
 * 输入: [2,3,-2,4]
 * 输出: 6
 * 解释: 子数组 [2,3] 有最大乘积 6。
 * 示例 2:
 *
 * 输入: [-2,0,-1]
 * 输出: 0
 * 解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。
 *
 */

public class _152MaximumProductSubarray {
    public static void main(String[] args) {
        int[] nums = {2, 3, -2, 4};
        int target = maxProduct(nums);
        System.out.println(target);
    }

    public static int maxProduct(int[] nums) {
        // 定义最终的最大值
        int max = Integer.MIN_VALUE;
        // 遍历的最大值和最小值
        int tempMax = 1, tempMin = 1;
        for (int i = 0 ; i < nums.length ; i++) {
            if (nums[i] < 0) {
                int temp = tempMax;
                tempMax = tempMin;
                tempMin = temp;
            }
            tempMax = Math.max(nums[i], nums[i] * tempMax);
            tempMin = Math.min(nums[i], nums[i] * tempMin);

            max = Math.max(tempMax, max);
        }
        return max;
    }
}
